Added 'gpsbabel -h foo' syntax
authorparkrrrr <parkrrrr@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 20 Apr 2006 13:58:10 +0000 (13:58 +0000)
committerparkrrrr <parkrrrr@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 20 Apr 2006 13:58:10 +0000 (13:58 +0000)
gpsbabel/defs.h
gpsbabel/filter_vecs.c
gpsbabel/filterdefs.h
gpsbabel/main.c
gpsbabel/vecs.c

index ec15c7d99f9181838b8a5823a71d50a04ddd79bc..8e4880cc4ecdd6aead1aaf779de7760ca53cb75a 100644 (file)
@@ -574,6 +574,7 @@ ff_vecs_t *find_vec(char * const, char **);
 void assign_option(const char *vecname, arglist_t *ap, const char *val);
 void disp_vec_options(const char *vecname, arglist_t *ap);
 void disp_vecs(void);
+void disp_vec( const char *vecname );
 void exit_vecs(void);
 void disp_formats(int version);
 const char * name_option(long type);
index 51dd1924496ce71f1fec1207bbf82979b1a73b5a..5840c31bc4b670351ebc3b5b839b19d144589650 100644 (file)
@@ -229,6 +229,27 @@ disp_filter_vecs(void)
        }
 }
 
+void
+disp_filter_vec( const char *vecname )
+{
+       fl_vecs_t *vec;
+       arglist_t *ap;
+
+       for (vec = filter_vec_list; vec->vec; vec++) {
+               if ( case_ignore_strcmp( vec->name, vecname )) {
+                       continue;
+               }
+               printf("        %-20.20s  %-50.50s\n",
+                       vec->name, vec->desc);
+               for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+                       if ( !(ap->argtype & ARGTYPE_HIDDEN )) 
+                               printf("          %-18.18s    %-.50s %s\n",
+                               ap->argstring, ap->helpstring,
+                               (ap->argtype&ARGTYPE_REQUIRED)?"(required)":"");
+               }
+       }
+}
+
 static signed int
 alpha (const void *a, const void *b)
 {
index 19272c362d612d1fe2625fe256d45e4c3a1312b3..029786bf893b94da85aec759c0d69d95dbabe10e 100644 (file)
@@ -39,6 +39,7 @@ typedef struct filter_vecs {
 filter_vecs_t * find_filter_vec(char * const, char **);
 void free_filter_vec(filter_vecs_t *);
 void disp_filters(int version);
+void disp_filter( const char *vecname );
 void disp_filter_vecs(void);
 void exit_filter_vecs(void);
 
index c0e42693be7ec47219a784989e2e29ff7549a1d6..3552252b2a7f80130167d5381d47ec9dcc7e8cc9 100644 (file)
@@ -28,7 +28,7 @@
 #define MYNAME "main"
 
 static void
-usage(const char *pname, int shorter)
+usage(const char *pname, int shorter )
 {
        printf("GPSBabel Version %s.  http://www.gpsbabel.org\n\n",
                        gpsbabel_version );
@@ -81,7 +81,13 @@ usage(const char *pname, int shorter)
        }
 }
 
-
+static void 
+spec_usage( const char *vec ) {
+       printf( "\n" );
+       disp_vec( vec );
+       disp_filter_vec ( vec );
+       printf( "\n" );
+}
 
 int
 main(int argc, char *argv[])
@@ -151,7 +157,12 @@ main(int argc, char *argv[])
                }
 
                if (argv[argn][1] == '?' || argv[argn][1] == 'h') {
-                       usage(argv[0],0);
+                       if ( argn < argc-1 ) {
+                               spec_usage( argv[argn+1] );
+                       }
+                       else {
+                               usage(argv[0],0);
+                       }
                        exit(0);
                }
 
index 5ae34958d7acad62c74a74a681dbef42f5ce01d6..b72dfbc39ebcb4404be16d3f973ff86ee9c5299a 100644 (file)
@@ -875,6 +875,7 @@ sort_and_unify_vecs(int *ctp)
        return svp;
 }
 
+#define VEC_FMT "      %-20.20s  %-.50s\n"
 
 void
 disp_vecs(void)
@@ -885,7 +886,6 @@ disp_vecs(void)
        int i = 0;
 
        svp = sort_and_unify_vecs(&vc);
-#define VEC_FMT "      %-20.20s  %-.50s\n"
        for (i=0;i<vc;i++) {
                if ( svp[i]->vec->type == ff_type_internal )  {
                        continue;
@@ -905,6 +905,34 @@ disp_vecs(void)
        return;
 }
 
+void
+disp_vec( const char *vecname )
+{
+       vecs_t **svp;
+       arglist_t *ap;
+       int vc;
+       int i = 0;
+
+       svp = sort_and_unify_vecs(&vc);
+       for (i=0;i<vc;i++) {
+               if ( case_ignore_strcmp( svp[i]->name, vecname ))  {
+                       continue;
+               }
+               printf(VEC_FMT, svp[i]->name, svp[i]->desc);
+               for (ap = svp[i]->vec->args; ap && ap->argstring; ap++) {
+                       if ( !(ap->argtype & ARGTYPE_HIDDEN)) 
+                               printf("          %-18.18s    %s%-.50s %s\n",
+                               ap->argstring, 
+                               (ap->argtype & ARGTYPE_TYPEMASK) == 
+                                       ARGTYPE_BOOL ? "(0/1) " : "",
+                               ap->helpstring,
+                               (ap->argtype & ARGTYPE_REQUIRED)?"(required)":"");
+               }
+       }
+       xfree (svp);    
+       return;
+}
+
 /*
  * Additional information for V1.
  * Output format type at front of line.